﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MuaChung.Models;
using MuaChung.Base;
using MuaChung.NganHang5D;
using MuaChung.doanhnghiepbiz;
using MuaChung.beatifulhousews;
using MuaChung.NganHangDAB;

namespace MuaChung.Controllers
{
    public class OrdersController : Controller
    {
        //
        // GET: /Orders/

        public ActionResult Index()
        {
            return View();
        }

        [Authorize]
        public ActionResult MyOrders()
        {
            ViewData["Message"] = "";
            List<DONHANG> models = new List<DONHANG>();
            int cid = AccountModel.FindByUsername(User.Identity.Name).ID;
            models = DonHangModels.FindAllByCustomerID(cid, 1, 100);
            return View(models);
        }

        [HttpPost]
        [Authorize]
        public ActionResult MyOrders(FormCollection frm)
        {
            ViewData["Message"] = "";
            string lstFail = "";
            string lstOK = "";
            if (frm.Count > 1)
            {
                for (int i = 0; i < frm.Count - 1; i++)
                {
                    int dhID = Convert.ToInt32(frm.AllKeys[i]);
                    string maDH = DonHangModels.FindByID(dhID).Ma_DonHang;
                    if (DonHangModels.CancelOrder(dhID))
                    {
                        lstOK += maDH + " ";
                    }
                    else
                    {
                        lstFail += maDH + " ";
                    }
                }
                if (lstOK == "")
                {
                    ViewData["Message"] += "Không có đơn hàng nào hủy thành công!<br/>";
                    ViewData["Message"] += "Các đơn hàng " + lstFail + "đều hủy thất bại!";
                }
                else if (lstFail == "")
                {
                    ViewData["Message"] += "Tất cả các đơn hàng " + lstOK + "đều hủy thành công!";
                }
                else
                {
                    ViewData["Message"] += "Các đơn hàng " + lstOK + "được hủy thành công!<br/>";
                    ViewData["Message"] += "Các đơn hàng " + lstFail + "được hủy thất bại!";
                }
            }
            else
            {
                ViewData["Message"] = "Vui lòng chọn đơn hàng mà bạn muốn hủy!";
            }
            List<DONHANG> models = new List<DONHANG>();
            int cid = AccountModel.FindByUsername(User.Identity.Name).ID;
            models = DonHangModels.FindAllByCustomerID(cid, 1, 100);
            return View(models);
        }

        [Authorize]
        public ActionResult WUC_MyOrder(int type=0)
        {
            List<DONHANG> models = new List<DONHANG>();
            int cid = AccountModel.FindByUsername(User.Identity.Name).ID;
            if (type != 0)
            {
                models = DonHangModels.FindAllByCustomerIDAndStatus(cid, type, 1, 100);
            }
            else
            {
                models = DonHangModels.FindAllByCustomerID(cid, 1, 100);
            }
            return View(models);
        }

        public ActionResult OrdersDetail(int id)
        {
            DONHANG models = new DONHANG();
            models = DonHangModels.FindByID(id);
            CHITIET_TAIKHOAN cttp = AccountModel.FindDetail(models.TAI_KHOAN.Username);
            ViewData["ht"] = cttp.HoTen;
            ViewData["dc"] = cttp.DiaChi;
            ViewData["dt"] = cttp.DienThoai;
            
            //ViewData["tt"] = models.TrangThai;
            switch (models.TrangThai)
            {
                case 0:
                    ViewData["tt"] = "";
                    break;
                case 1:
                    ViewData["tt"] = "ĐẶT HÀNG THÀNH CÔNG";
                    break;
                case 2:
                    ViewData["tt"] = "";
                    break;
                case 3:
                    ViewData["tt"] = "CHỜ THANH TOÁN";
                    break;
                case 4:
                    ViewData["tt"] = "ĐÃ THANH TOÁN";
                    break;
                case 5:
                    ViewData["tt"] = "ĐANG VẬN CHUYỂN";
                    break;
                case 6:
                    ViewData["tt"] = "HÓA ĐƠN HOÀN TẤT";
                    break;
            }

            return View(models);
        }             

        [Authorize]
        public ActionResult CheckOut()
        {
            ViewData["SoTK"] = "";
            return View();
        }

        [HttpPost]
        [Authorize]
        public ActionResult CheckOut(FormCollection frm)
        {
            List<DONHANG> lstDH = new List<DONHANG>();
            if (frm.AllKeys.Count() > 2)
            {
                for (int i = 0; i < frm.AllKeys.Count() - 2; i++)
                {
                    int maDH = Convert.ToInt32(frm.AllKeys[i]);
                    DONHANG tmp = DonHangModels.FindByID(maDH);
                    lstDH.Add(tmp);
                }
            }
            else
            {
                ViewData["Message"] = "Bạn vẫn chưa chọn hóa đơn cần thanh toán!";
                return View();
            }
            string SoTK = frm.GetValue("SoTK").AttemptedValue;
            ViewData["SoTK"] = SoTK;
            int MaNganHang = Convert.ToInt32(frm.GetValue("SelectWSCoupon").AttemptedValue);
            WEBSERVICE sv = ServiceModel.FindWSByID(MaNganHang);
            switch(sv.Ma_WS)
            {
                case "MSB":
                    {
                        KhachHangWS ws = new KhachHangWS();
                        string sid = ws.Authenticate(sv.WSUSERNAME, sv.WSPASSWORD);
                        foreach (var item in lstDH)
                        {
                            string sotkdn = item.COUPON.WEBSERVICE.DOANHNGHIEP.SoTK_NganHang;
                            string mann = item.COUPON.WEBSERVICE.DOANHNGHIEP.Ma_NganHang;
                            int code = ws.TransferMoney(sid, SoTK, sv.DOANHNGHIEP.MaDN, sotkdn, mann, (float)item.TongGia, "VND");
                            ViewData["Message"] = ConvertBankingCodeToMessage(code);
                            if (code == 1)
                            {
                                item.TrangThai = 4;
                            }
                        }
                        break;
                    }
                case "DAB":
                    {
                        ServiceForWebUser ws = new ServiceForWebUser();
                        string sid = ws.Authenticate(sv.WSUSERNAME, sv.WSPASSWORD);
                        foreach (var item in lstDH)
                        {
                            string sotkdn = item.COUPON.WEBSERVICE.DOANHNGHIEP.SoTK_NganHang;
                            string mann = item.COUPON.WEBSERVICE.DOANHNGHIEP.Ma_NganHang;
                            string code = ws.TransferMoney(sid, SoTK, sv.DOANHNGHIEP.MaDN, sotkdn, mann, (float)item.TongGia, "VND");
                            ViewData["Message"] = ConvertBankingCodeToMessage(Convert.ToInt32(code));
                            if (Convert.ToInt32(code) == 1)
                            {
                                item.TrangThai = 4;
                            }
                        }
                        break;
                    }
                default:
                    break;
            }    
            return View();
        }

        [Authorize]
        public ActionResult SelectVanChuyen(int id)
        {
            DONHANG dh = DonHangModels.FindByID(id);
            ViewData["dhid"] = id;
            WEBSERVICE sv = dh.COUPON.WEBSERVICE;            
            ContactInfo clientinfo = new ContactInfo();
            clientinfo.DiaChi = AccountModel.FindDetail(dh.TAI_KHOAN.Username).DiaChi;
            clientinfo.Email = dh.TAI_KHOAN.Email;
            clientinfo.SoDienThoai = AccountModel.FindDetail(dh.TAI_KHOAN.Username).DienThoai;
            SelectTransportModel model = new SelectTransportModel();
            model.info = clientinfo;
            model.CustomerName = AccountModel.FindDetail(dh.TAI_KHOAN.Username).HoTen;
            if (sv.Ma_WS == BaseWeb.WS_BIZ5A)
            {
                WebServiceDoanhNghiepBiz ws = new WebServiceDoanhNghiepBiz();
                string sid = ws.Authenticate(sv.WSUSERNAME, sv.WSPASSWORD);
                model.lstcmp = ws.GetTranports().ToList();
            }
            else if (sv.Ma_WS == BaseWeb.WS_BIZ2B)
            {
                Service1 ws = new Service1();
                string sid = ws.Authenticate(sv.WSUSERNAME, sv.WSPASSWORD);
                model.lstcmp = ws.GetTranports().ToList();
            }
            ViewData["Message"] = String.Empty;
            return View(model);
        }

        [HttpPost]
        [Authorize]
        public ActionResult SelectVanChuyen(FormCollection frm)
        {
            SelectTransportModel model = new SelectTransportModel();
            int id = Convert.ToInt32(frm.GetValue("DHID").AttemptedValue);
            DONHANG dh = DonHangModels.FindByID(id);
            WEBSERVICE sv = dh.COUPON.WEBSERVICE;
            ViewData["dhid"] = id;
            ViewData["Message"] = String.Empty;
            ContactInfo clientinfo = new ContactInfo();
            clientinfo.DiaChi = frm.GetValue("DiaChi").AttemptedValue;
            clientinfo.Email = frm.GetValue("Email").AttemptedValue;
            clientinfo.SoDienThoai = frm.GetValue("SoDienThoai").AttemptedValue;
            model.CustomerName = frm.GetValue("CustomerName").AttemptedValue;
            model.info = clientinfo;
            string transComId = frm.GetValue("selectVanChuyen").AttemptedValue;
            string linkVanChuyen = String.Empty;
            if (sv.Ma_WS == BaseWeb.WS_BIZ5A)
            {
                WebServiceDoanhNghiepBiz ws = new WebServiceDoanhNghiepBiz();
                string sid = ws.Authenticate(sv.WSUSERNAME, sv.WSPASSWORD);
                model.lstcmp = ws.GetTranports().ToList();
                linkVanChuyen = ws.ConfirmOrder(sid, transComId, "1", dh.Ma_DonHang, clientinfo);
            }
            else if (sv.Ma_WS == BaseWeb.WS_BIZ2B)
            {
                Service1 ws = new Service1();
                string sid = ws.Authenticate(sv.WSUSERNAME, sv.WSPASSWORD);
                model.lstcmp = ws.GetTranports().ToList();
                linkVanChuyen = ws.ConfirmOrder(sid, transComId, "1", dh.Ma_DonHang, clientinfo);
            }
            if (linkVanChuyen == "Fail")
            {
                ViewData["Message"] = "Hoàn tất đơn hàng thất bại!";
            }
            else
            {
                dh.LinkVanChuyen = linkVanChuyen;
                dh.TrangThai = 5;
                if ( DonHangModels.Update(dh))
                {
                    ViewData["Message"] = "Đơn hàng hoàn tất, vui lòng chờ nhận hàng.<br/>Link xem thông tin vận chuyển: <a href=\"" + linkVanChuyen + "\" title=\"Xem thông tin vận chuyển của sản phẩm\">" + linkVanChuyen + "</a>";
                }
                else
                {
                    ViewData["Message"] = "Có lỗi xảy ra! Vui lòng thử lại lần nữa!";
                }
            }
            return View(model);
        }

        private string ConvertBankingCodeToMessage(int code)
        {
            switch (code)
            {
                case 1:
                    return "Chuyển tiền thành công";
                case 2:
                    return "Tài khoản chuyển tiền không đủ tiền";
                case 3:
                    return "Tài khoản chuyển tiền không tồn tại";
                case 4:
                    return "Tài khoản nhận tiền không tồn tại";
                case 5:
                    return "Mã ngân hàng chuyển/ nhận tiền không tồn tại";
                case 6:
                    return "Lỗi khác";
                default:
                    return "Lỗi không xác định";                    
            }
        }
    }
}
